package pe.gob.onpe.ejb;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import pe.gob.onpe.ejb.id.RegistroLineaId;


/**
 * RegistroLinea entity.
 * 
 * @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "REGISTRO_LINEA", schema = "SVENP", uniqueConstraints = {})
public class RegistroLinea implements java.io.Serializable {

	// Fields
	private static final long serialVersionUID = -7590223144335561002L;
	private RegistroLineaId		id;
	private ProcesoElectoral	procesoElectoral;
	private OficinaDespacho		oficinaDespacho;
	private Ubigeo				ubigeo;
	private String				direccion;
	private String				correoelectronico;
	private String				numeronip;
	private Long				numerointentovotacion;
	private Long				emitiovoto;
	private String				contrasena;
	private String				estadoinscripcion;
	private Set<ConstanciaVotacion> constanciaVotacions = new HashSet<ConstanciaVotacion>(0);

	// Constructors

	/** default constructor */
	public RegistroLinea() {
	}

	/** minimal constructor */
	public RegistroLinea(RegistroLineaId id, ProcesoElectoral procesoElectoral,
			OficinaDespacho oficinaDespacho, String direccion,
			String correoelectronico, String contrasena,
			String estadoinscripcion) {
		this.id = id;
		this.procesoElectoral = procesoElectoral;
		this.oficinaDespacho = oficinaDespacho;
		this.direccion = direccion;
		this.correoelectronico = correoelectronico;
		this.contrasena = contrasena;
		this.estadoinscripcion = estadoinscripcion;
	}

	/** full constructor */
	public RegistroLinea(RegistroLineaId id, ProcesoElectoral procesoElectoral,
			OficinaDespacho oficinaDespacho, Ubigeo ubigeo, String direccion,
			String correoelectronico, String numeronip,
			Long numerointentovotacion, Long emitiovoto, String contrasena,
			String estadoinscripcion,
			Set<ConstanciaVotacion> constanciaVotacions) {
		this.id = id;
		this.procesoElectoral = procesoElectoral;
		this.oficinaDespacho = oficinaDespacho;
		this.ubigeo = ubigeo;
		this.direccion = direccion;
		this.correoelectronico = correoelectronico;
		this.numeronip = numeronip;
		this.numerointentovotacion = numerointentovotacion;
		this.emitiovoto = emitiovoto;
		this.contrasena = contrasena;
		this.estadoinscripcion = estadoinscripcion;
		this.constanciaVotacions = constanciaVotacions;
	}

	// Property accessors
	@EmbeddedId
	@AttributeOverrides( {
			@AttributeOverride(name = "numerodocumento", column = @Column(name = "NUMERODOCUMENTO", unique = false, nullable = false, insertable = true, updatable = true)),
			@AttributeOverride(name = "procesoElectoralId", column = @Column(name = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)) })
	public RegistroLineaId getId() {
		return this.id;
	}

	public void setId(RegistroLineaId id) {
		this.id = id;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumn(name = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = false, updatable = false)
	public ProcesoElectoral getProcesoElectoral() {
		return this.procesoElectoral;
	}

	public void setProcesoElectoral(ProcesoElectoral procesoElectoral) {
		this.procesoElectoral = procesoElectoral;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumns( {
			@JoinColumn(name = "INSTITUCION_SOLICITANTE_ID", referencedColumnName = "INSTITUCION_SOLICITANTE_ID", unique = false, nullable = false, insertable = true, updatable = true),
			@JoinColumn(name = "OFICINADESPACHO_ID", referencedColumnName = "OFICINADESPACHO_ID", unique = false, nullable = false, insertable = true, updatable = true) })
	public OficinaDespacho getOficinaDespacho() {
		return this.oficinaDespacho;
	}

	public void setOficinaDespacho(OficinaDespacho oficinaDespacho) {
		this.oficinaDespacho = oficinaDespacho;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumn(name = "UBIGEO", unique = false, nullable = true, insertable = true, updatable = true)
	public Ubigeo getUbigeo() {
		return this.ubigeo;
	}

	public void setUbigeo(Ubigeo ubigeo) {
		this.ubigeo = ubigeo;
	}

	@Column(name = "DIRECCION", unique = false, nullable = false, insertable = true, updatable = true)
	public String getDireccion() {
		return this.direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	@Column(name = "CORREOELECTRONICO", unique = false, nullable = false, insertable = true, updatable = true)
	public String getCorreoelectronico() {
		return this.correoelectronico;
	}

	public void setCorreoelectronico(String correoelectronico) {
		this.correoelectronico = correoelectronico;
	}

	@Column(name = "NUMERONIP", unique = false, nullable = true, insertable = true, updatable = true)
	public String getNumeronip() {
		return this.numeronip;
	}

	public void setNumeronip(String numeronip) {
		this.numeronip = numeronip;
	}

	@Column(name = "NUMEROINTENTOVOTACION", unique = false, nullable = true, insertable = true, updatable = true, precision = 10, scale = 0)
	public Long getNumerointentovotacion() {
		return this.numerointentovotacion;
	}

	public void setNumerointentovotacion(Long numerointentovotacion) {
		this.numerointentovotacion = numerointentovotacion;
	}

	@Column(name = "EMITIOVOTO", unique = false, nullable = true, insertable = true, updatable = true, precision = 1, scale = 0)
	public Long getEmitiovoto() {
		return this.emitiovoto;
	}

	public void setEmitiovoto(Long emitiovoto) {
		this.emitiovoto = emitiovoto;
	}

	@Column(name = "CONTRASENA", unique = false, nullable = true, insertable = true, updatable = true)
	public String getContrasena() {
		return this.contrasena;
	}

	public void setContrasena(String contrasena) {
		this.contrasena = contrasena;
	}

	@Column(name = "ESTADOINSCRIPCION", unique = false, nullable = false, insertable = true, updatable = true)
	public String getEstadoinscripcion() {
		return this.estadoinscripcion;
	}

	public void setEstadoinscripcion(String estadoinscripcion) {
		this.estadoinscripcion = estadoinscripcion;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "registroLinea")
	public Set<ConstanciaVotacion> getConstanciaVotacions() {
		return this.constanciaVotacions;
	}

	public void setConstanciaVotacions(
			Set<ConstanciaVotacion> constanciaVotacions) {
		this.constanciaVotacions = constanciaVotacions;
	}

}